- CSS原生变量在主题定制方面很常用 用法是
--name定义var(--name)使用 scoped的本质是为元素加上了data-v-xxxx这样的属性 元素身上有这个不需要深度选择器没有则需要。深度选择器告诉 Vue 编译器,这条规则不要加data-v-xxxx属性选择器,让它“穿透”进去,影响到子组件- ts定义类型可以提取出来放在一个文件
d.ts并且vue组件也可以用d.ts去单独定义 这样在传props给组件也能获得代码提示 称之为组件类型 - 用嵌套路由做公共
layout,需要多级router-view type pickPerson = Pick<Person,'age'>从原类型对象中选取需要的,Pick换成Omit就是排除掉参数后的新类型对象,&用于再合并。一种ts类型复用的方法user.a?.b可选链意味着a存在再去找b 如果不存在直接上一层停止- 最近写vue项目的时候,解构一直是习惯丢响应式,没想到已经支持响应式解构了
(vue3.5+),给要是老点的AI都识别不出这个新特性。from:https://cn.vuejs.org/guide/typescript/composition-api.html#typing-component-props - 在 3.4 及更低版本,响应式 Props 解构不会被默认启用。
- vue3里用组合式API比较乱,比起响应式不容易看出区块。最佳实践是抽离函数以Use开头,称之为自定义Hooks
- margin-top会导致父容器也连带被margin下来,这是边距塌陷的一种。子元素的 margin-top 会和父元素发生“塌陷合并”。解决方法加父元素
overflow等等 - 为什么有时候text align居中不起作用 margin auto却可以,由元素决定,text align 控制行内内容的对齐 margin: 0 auto 控块级
- 给按钮贴材质:经常遇到材质和背景色的顺序问题,可以用CSS 的多重背景(Multiple Backgrounds)来实现比较好的效果。
javascript
.ef-btn {
background: transparent; // 确保按钮本身透明
overflow: hidden; // 防止伪元素溢出
&::before {
content: '';
position: absolute;
inset: 0;
// 关键:第一个 url 是材质(上层),第二个是变量颜色(下层)
background:
url('@/assets/icons/home/button-texture.png'),
var(--btn-ef);
background-size: cover;
background-position: center;
z-index: -1; // 只需 -1 即可
transition: opacity 0.3s;
}
&:hover::before {
opacity: 0.8; // 还可以方便做悬停效果
}
}